home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
051-075
/
disk_058
/
newzap
/
sources
/
windows.c
< prev
Wrap
C/C++ Source or Header
|
1992-05-06
|
5KB
|
164 lines
/* WINDOWS.C - Support routines for NEWZAP.C - (c) 1986 John Hodgson */
#include "iff.h"
#define ERROR 1 /* error return code */
#define KICKSTART_REV 33 /* minimum 1.2 rev for special funcs */
extern struct ExecBase *SysBase;
extern struct Gadget gadget[];
extern char ScreenDump[],BrushDump[],SearchDump[];
extern UBYTE title[],bakbuf[]; /* shared by all string gadgets */
extern void *IntuitionBase,Search1();
extern FreeBitMap();
struct PicMap pbitmap,arbitmap,brbitmap;
struct Requester arequest,brequest;
struct Window *pwindow,*OpenWindow();
UBYTE searchbuf[50]; /* string gadget input buffers */
OpenBackDrop()
{
struct NewWindow NewWindow;
setmem(&NewWindow,sizeof(NewWindow),0); /* pre-init to all zeroes */
NewWindow.Width=640; NewWindow.Height=200;
NewWindow.DetailPen=NewWindow.BlockPen=-1;
NewWindow.IDCMPFlags=
CLOSEWINDOW|MENUPICK|MOUSEMOVE|RAWKEY|GADGETDOWN|GADGETUP;
NewWindow.Flags=WINDOWDEPTH|WINDOWCLOSE|WINDOWDRAG|SUPER_BITMAP|ACTIVATE;
NewWindow.FirstGadget=&gadget[0];
NewWindow.Title=&title[0];
NewWindow.BitMap=&pbitmap.BitMap;
NewWindow.Type=WBENCHSCREEN;
if (ReadILBM(&ScreenDump[0],1,&pbitmap)) return(ERROR);
if ((pwindow=OpenWindow(&NewWindow))==0L) {
FreeBitMap(&pbitmap.BitMap); return(ERROR); }
return(0);
}
CloseBackDrop()
{
short i;
CloseWindow(pwindow);
/* Note that we free raster AFTER closing window! Important! */
FreeBitMap(&pbitmap.BitMap);
}
InitHelpRequester()
{
static struct Gadget argadget = {
0L,340,97,75,9,GADGHNONE,ENDGADGET,BOOLGADGET|REQGADGET,
0L,0L,0L,0L,0L,0L,0L };
setmem(&arequest,sizeof(arequest),0); /* start w/fresh structure */
arequest.LeftEdge=97; arequest.TopEdge=32;
arequest.Width=447; arequest.Height=113;
arequest.ReqGadget=&argadget;
arequest.Flags=PREDRAWN;
arequest.ImageBMap=&arbitmap.BitMap;
if (ReadILBM(&BrushDump[0],1,&arbitmap)) return(ERROR);
return(0);
}
FreeRequester()
{
FreeBitMap(&arbitmap.BitMap);
}
InitSearchRequester()
{
static struct StringInfo searchinfo = {
&searchbuf[0],&bakbuf[0],0,30,0,0,0,0,71,53,0L,0L,0L };
static struct Gadget brgadget[2] = { /* adjust if real requester! */
{ &brgadget[1],344,6,40,12,GADGHNONE,RELVERIFY,BOOLGADGET,
0L,0L,0L,0L,0L,0L,0L },
{ 0L,71,53,244,9, /* search string gadget */
GADGHCOMP,RELVERIFY,
STRGADGET|REQGADGET,0L,0L,0L,0L,(APTR)&searchinfo,12,(APTR)&Search1 }
};
setmem(&brequest,sizeof(brequest),0); /* start w/fresh structure */
brequest.LeftEdge=123; brequest.TopEdge=38;
brequest.Width=400; brequest.Height=101;
brequest.ReqGadget=&brgadget[0];
brequest.Flags=PREDRAWN;
brequest.ImageBMap=&brbitmap.BitMap;
if (ReadILBM(&SearchDump[0],1,&brbitmap)) return(ERROR);
return(0);
}
FreeSearchRequester() /* provided for consistency */
{
FreeBitMap(&brbitmap.BitMap);
}
FakeRequest()
{
/* I just can't get string gadgets in PREDRAWN requesters to work correctly
under 1.2. For now, we'll fake it with a borderless window. */
struct NewWindow NewWindow;
struct Window *window;
struct IntuiMessage *reqmsg;
static struct IntuiMessage relaymsg; /* static 'cuz referenced outside! */
struct Gadget *gadgetptr;
setmem(&NewWindow,sizeof(NewWindow),0); /* pre-init to all zeroes */
NewWindow.LeftEdge=brequest.LeftEdge; NewWindow.TopEdge=brequest.TopEdge;
NewWindow.Width=brequest.Width; NewWindow.Height=brequest.Height;
NewWindow.IDCMPFlags=GADGETUP;
NewWindow.Flags=BORDERLESS|SUPER_BITMAP|ACTIVATE;
NewWindow.FirstGadget=brequest.ReqGadget;
NewWindow.BitMap=brequest.ImageBMap;
NewWindow.Type=WBENCHSCREEN;
/* forget requester if lack of memory prevents window opening */
if ((window=OpenWindow(&NewWindow))==0L) return(ERROR);
/* note : although this routine is meant to be a general-purpose
requester emulator, it's just too handy to activate the Search
menu's string requester (1.2 or later). We check the LibNode
because SoftVer in ExecBase is 0 (??) at the time of this writing. */
if (SysBase->LibNode.lib_Version>=KICKSTART_REV)
ActivateGadget(&brequest.ReqGadget[1],window,0L);
WaitPort(window->UserPort); /* wait for gadgetup */
reqmsg=(struct IntuiMessage *)GetMsg(window->UserPort); /* & dequeue msg */
gadgetptr=(struct Gadget *)reqmsg->IAddress; /* fetch gadget pick */
/* Assume : 1) all gadgets have the ENDGADGET flag set, and :
2) we don't want to broadcast about gadgets w/no ID!
Msgs we care about get pipelined over to the main window, where
the newzap body should take care of replying to Intuition for us! */
if (gadgetptr->GadgetID) {
relaymsg=*reqmsg; /* duplicate message */
relaymsg.ExecMessage.mn_ReplyPort=0; /* forget about replies */
PutMsg(pwindow->UserPort,&relaymsg); /* attach to main window! */
}
ReplyMsg(reqmsg); /* always reply to messages */
CloseWindow(window); return(0); /* cleanup & leave */
}